import Cookies from 'js-cookie'

export interface DataInfo<T> {
  /** token */
  accessToken: string
  /** `accessToken`的过期时间（时间戳） */
  expires: T
  /** 用于调用刷新accessToken的接口时所需的token */
  refreshToken: string
  /** 头像 */
  avatar?: string
  /** 用户名 */
  username?: string
  /** 昵称 */
  nickname?: string
  /** 当前登录用户的角色 */
  roles?: Array<string>
  /** 当前登录用户的按钮级别权限 */
  permissions?: Array<string>
}

export const userKey = 'user-info'
// TODO: 需要配置
export const TokenKey = 'WANLAN-TOKEN'
// TODO: 需要配置
/** 记住密码状态下的token在Cookie中存储的天数，默认1天 */
export const TOKEN_COOKIE_EXPIRES = 1

/**
 * 通过`multiple-tabs`是否在`cookie`中，判断用户是否已经登录系统，
 * 从而支持多标签页打开已经登录的系统后无需再登录。
 * 浏览器完全关闭后`multiple-tabs`将自动从`cookie`中销毁，
 * 再次打开浏览器需要重新登录系统
 */
export const multipleTabsKey = 'multiple-tabs'

/** 获取token */
export const getToken = () => Cookies.get(TokenKey) || ''

/**
 * 设置token
 *
 * @param token
 * @param rememberMe
 */
export const setToken = (token: string, rememberMe?: boolean) => {
  const cookieOption = rememberMe ? { expires: TOKEN_COOKIE_EXPIRES } : {}
  Cookies.set(multipleTabsKey, 'true', cookieOption)
  return Cookies.set(TokenKey, token, cookieOption)
}

/** 删除token */
export const removeToken = () => {
  Cookies.remove(multipleTabsKey)
  return Cookies.remove(TokenKey)
}
